package com.itbupt.infrastructure.dao;

import com.itbupt.infrastructure.dao.po.GroupBuyOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @Author dingchang
 * @Date 2025/4/28 18:41
 * @Description: 用户拼单订单持久化接口
 */

@Mapper
public interface IGroupBuyOrderDao {

    /**
     * 插入一条拼单订单
     * @param groupBuyOrder
     */
    void insert(GroupBuyOrder groupBuyOrder);

    /**
     * 更新锁单的数量 - 增加锁单的数量
     * @param teamId 组ID
     * @return
     */
    int updateAddLockCount(String teamId);

    /**
     * 更新锁单的数量 - 退单就减少锁单的数量
     * @param teamId
     * @return
     */
    int updateSubtractionLockCount(String teamId);

    /**
     * 查询拼单的进度的信息 - 目标数量、完成数量、锁单数量
     * @param teamId 组id
     * @return
     */
    GroupBuyOrder queryGroupBuyProgress(String teamId);

    /**
     * 查询用户组团拼单信息
     * @param teamId
     * @return
     */
    GroupBuyOrder queryGroupBuyTeamByTeamId(String teamId);

    /**
     * 更新拼团达成的数量为+1
     * @param teamId
     * @return
     */
    int updateAddCompleteCount(String teamId);

    /**
     * 更新拼团信息状态为complete
     * @param teamId
     * @return
     */
    int updateOrderStatus2COMPLETE(String teamId);

    /**
     * 根据teamId查询相应的teamId下的拼单订单列表
     * 条件：状态为0-正在拼单中， 锁单数量 < 目标数量
     * @param teamIds
     * @return
     */
    List<GroupBuyOrder> queryGroupBuyProgressByTeamIds(@Param("teamIds") Set<String> teamIds);

    /**
     * 查询拼团队伍的数量
     * @param teamIds
     * @return
     */
    Integer queryAllTeamCount(@Param("teamIds") Set<String> teamIds);

    /**
     * 查询成团队伍（status=1）的数量
     * @param teamIds
     * @return
     */
    Integer queryAllTeamCompleteCount(@Param("teamIds") Set<String> teamIds);

    /**
     * 查询参团人数总数 - lockCount的值就是每个拼团下锁单的数量
     * @param teamIds
     * @return
     */
    Integer queryAllUserCount(@Param("teamIds") Set<String> teamIds);

}
